var amaco_map_reset=false;
var amaco_map_inited=false;

var Device = function(){
		
		var engine=null;
		var engine_version=null;
		var platform=null;
		
		
		function findDevice(){
			var ua=navigator.userAgent;
			/* FROM JQUERY: */
			ua = ua.toLowerCase();
		
			var rwebkit = /(webkit)[ \/]([\w.]+)/;
			var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;
			var rmsie = /(msie) ([\w.]+)/;
			var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
			
			var match = rwebkit.exec( ua ) ||
				ropera.exec( ua ) ||
				rmsie.exec( ua ) ||
				ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
				[];
			var engine = {
				webkit : (match[1]=="webkit"), 
				opera : (match[1]=="opera"),
				msie : (match[1]=="msie"),
				mozilla : (match[1]=="mozilla") 
			};
			var engine_version=match[2] || "0";
			/* END JQUERY */
			
			var riphone = /(iphone)/;
			var ripad = /(ipad)/;
			var randroid = /(android)/;
			var rblackberry = /(blackberry)/;
			var rios = /(mac os x)[ \w.]+(mobile)/;
			var rmacos = /(mac os x)/; // less than ios, after in the OR
			var rlinux = /(linux)/;
			var rwindows = /(windows)/;
			match = riphone.exec( ua ) || ripad.exec( ua ) || randroid.exec( ua ) ||
					rblackberry.exec( ua ) || rios.exec( ua ) || rmacos.exec( ua ) ||
					rlinux.exec( ua ) || rwindows.exec( ua ) ||	[];
			var platform = {
				iphone : (match[1]=="iphone"),
				ipad : (match[1]=="ipad"),
				android : (match[1]=="android"),
				blackberry : (match[1]=="blackberry"),
				ios : (match.length>2 && match[2]=="mobile"),
				macos: (match[1]=="macos"),
				linux : (match[1]=="linux"),
				windows : (match[1]=="windows")
			}; 
			
			return {engine: engine, engine_version: engine_version, platform: platform};
		}	
		
		var device=findDevice();
		engine=device.engine;
		engine_version=device.engine_version;
		platform=device.platform;
		
		
		function isMobileWebkit(){
			return (platform.ios || platform.android || platform.blackberry);
		}
		
		publicObj={
			engine : engine,
			engine_version : engine_version,
			platform : platform,
			isMobileWebkit : isMobileWebkit
		};
		return publicObj;
	
	};


var device=new Device();

function AmacoStart(){
$.getJSON(data_URL,{format:"json"},function(data){
if(device.platform.ipad)$('appml').append('<left width="200px"></left>');
		json=data;
		for(i=0;i<json.fermate.length;i++){
			fermata=json.fermate[i];
			var location = new google.maps.LatLng(fermata.lat, fermata.lon);
			marker = new google.maps.Marker({
				position: location,
				icon: imm_fermata,
				title:fermata.name
			});
			var contentString = '<div id="info_content">'+
			'<div id="info_titolo"><b>Fermata '+fermata.name+'</b></br></div>'+
			//'<div id="info_titolo"><ul><li><a href="#fermata'+fermata.key+'">'+fermata.name+'</a></li></ul></div>'+
			'<div id="info_body">'+fermata.indirizzo+ '</div>';
			'</div>';
			for(j=0;j<fermata.linee.length;j++){
				contentString+='<div>linea '+getLinea(fermata.linee[j]).name+'&nbsp;</div><div><img onClick="showAttesa('+fermata.linee[j]+','+fermata.key+',\'Il tempo di attesa della linea <b>'+fermata.linee[j]+'</b> alla fermata <b>'+fermata.indirizzo+'</b> &egrave; di\')" src="'+host+icona_orologio+'"/></div>';
			}
			var infowindow = new google.maps.InfoWindow({
				content: contentString
			});
			fermata.marker=marker;
			fermata.infowindow=infowindow;
			fermata.openInfoWindow=function(){ closeInfoWindows(); this.infowindow.open(mappa,this.marker); };
			fermata.closeInfoWindow=function(){ this.infowindow.close(); }
			fermata.callee=function(){ var ferm=trovaFermataDaCallee(arguments.callee); ferm.openInfoWindow(); };
			fermata.gmap_listener=google.maps.event.addListener(marker, 'click', fermata.callee);
			var fermata_page="";
			//fermata_page+='<page id="fermata'+fermata.key+'" title="'+fermata.name+'"><ul><li class="box_title">'+fermata.name+'<img data-group="fermate_mappa" data-id_fermata="'+fermata.key+'" src="immagini/mappa.png"/></li><div class="testo_fermata">'+fermata.indirizzo+'</div>';
			//for(j=0;j<fermata.linee.length;j++){
			//	fermata_page+='<li   class="arrow"><a href="#linea'+fermata.linee[j]+'">'+getLinea(fermata.linee[j]).name+'</a><a style="color:rgba(0,0,0,.9);" href="#" class="whiteButtonSimple" data-group="attesa_linee" data-id_fermata="'+fermata.key+'" data-id_linea="'+fermata.linee[j]+'">Tempo di attesa</a></li>';
			//}
			//fermata_page+='</ul></div></page>';
			//$('#panel_linee').append(fermata_page);
		}
		$.each(json.linee, function(index,value){
			var flightPlanCoordinates = new Array();
			$.each(json.linee[index].percorso, function(ind,value){
				flightPlanCoordinates.push(new google.maps.LatLng(value.lat, value.lon));
			});
			var flightPath = new google.maps.Polyline({
				path: flightPlanCoordinates,
				strokeColor: value.color,
				strokeOpacity: 1.0,
				strokeWeight: 4
			});
			value.path=flightPath;
			$('#list_linee').append('<li  class="arrow"><a href="#linea'+value.key+'"   data-href="#linea'+value.key+'" >'+value.name+'</a></li> ');
			var linea_page='<page id="linea'+value.key+'" title="'+value.name+'"><ul><li class="box_title">'+value.name+'<img data-group="linee_mappa" data-id_linea="'+value.key+'" src="immagini/mappa.png"/></li>'+value.description+'';
			var linea=value;
			for(j=0;j<linea.fermate.length;j++){
				fermata=getFermata(linea.fermate[j].key);
				linea_page+='<li class="arrow"><a href="#fermata'+linea.fermate[j].key+'">'+fermata.name+'</a></li>';
				/* 
				 '<li><div><div>Orari:</div><div><select data-appml-title="Orari"> ';
					var data1=new Date();
					var data2=new Date();
					var trovato=false;
					$.each(linea.fermate[j].orari,function(index,value){
						linea_page+='<option value="'+value+'"';
						min_sec=value.split(":");
						data2.setMinutes(min_sec[1]);
						data2.setHours(min_sec[0]);
						if(data2>data1&&!trovato){
							linea_page+=' selected';
							trovato=true;
						}
						linea_page+='>'+value+'</option>';
					});
                linea_page+='</select></div></div></li>'; 
                */
			}
			linea_page+='</ul></page>';
			$('#panel_linee').append(linea_page);
		});
		appML.initAppMLAmaco();
	});
}
function mapAutoSet(id_element, pos, tipo){		
	var bounds = new google.maps.LatLngBounds ();
	if(tipo=="linea"){
		if(id_element==-1){
			for(i=0;i<json.fermate.length;i++){
				bounds.extend(json.fermate[i].marker.getPosition());
			}
		}
		else{
			linea=getLinea(id_element);
			for(i=0;i<linea.fermate.length;i++){
				bounds.extend((getFermata(linea.fermate[i].key)).marker.getPosition());
			}
		}
	}
	else{
		bounds.extend((getFermata(id_element)).marker.getPosition());
	}
	if(pos) bounds.extend(json.posizione.getPosition());
	console.log("fitto a "+JSON.stringify(json.posizione.getPosition()));
	mappa.fitBounds (bounds);
}


function setPosizionamento(pos){
	if(pos){
		AUTO=true;
		$('#manuale').hide();
		$('#automatico').show();
	}
	else{
		AUTO=false;
		$('#manuale').show();
		$('#automatico').hide();
		if(($('#indirizzo').attr('value'))!=indirizzo){
			indirizzo=$('#indirizzo').attr('value');
		}
		
	}
}


function posiziona(val){
	if(json.posizione!=null)
	   json.posizione.setMap(null);
	if(val){
		if(geo_position_js.init()){
			geo_position_js.getCurrentPosition(success_callback,error_callback,{enableHighAccuracy:true,options:5000});
            console.log("Geoposition init");
		}
		else{
            console.log("No geoposition");
			setPositionFromAddress();
			setPosizionamento(false);
			appML.appManagerShowDialog({
				message:"<div class='testo_attesa'>Non &egrave; possibile rilevare automaticamente la tua posizione, clicca su impostazioni se vuoi settarla manualmente</div>",
				title: "Posizionamento automatico non disponibile"
			});
		}
	}
	else{
	console.log("No auto");
		setPositionFromAddress();
		setPosizionamento(false);
	}
    

}
function refreshMyPosition(){
	json.posizione.setMap(mappa);
}
function setPositionFromAddress(){
			indirizzo=$('#indirizzo').attr('value')
			var geocoder = new google.maps.Geocoder();
			geocoder.geocode({
				address: indirizzo
			}, function(locResult) {
				var lat1 = locResult[0].geometry.location.lat();
				var lng1 = locResult[0].geometry.location.lng();
				var location = new google.maps.LatLng(lat1, lng1);
				marker = new google.maps.Marker({
					position: location,
					icon: imm_mia_posizione,
					title:"La tua posizione"
				});
				json.posizione=marker;
				json.posizione.setMap(mappa);
				resetAmacoMap();
			});
			
}
function success_callback(p){
	console.log("success callback");
	var location = new google.maps.LatLng(p.coords.latitude.toFixed(2), p.coords.longitude.toFixed(2));
	marker = new google.maps.Marker({
		position: location,
		icon: imm_mia_posizione,
		title:"La tua posizione"
	});
	json.posizione=marker;
	json.posizione.setMap(mappa);
	setPosizionamento(true);
	$('#coordinate').html("Coordinate: "+json.posizione.getPosition().toString());
	resetAmacoMap();
}

function resetAmacoMap(){
	if(amaco_map_inited)
		amaco_map_reset=true;
	else{
		amaco_map_inited=true;
		mapAutoSet(-1,true,"linea");
	}
}

function error_callback(p){
	console.log("error callback");
	appML.appManagerShowDialog({
		message:"<div class='testo_attesa'>Non &egrave; possibile rilevare automaticamente la tua posizione, clicca su impostazioni se vuoi settarla manualmente</div>",
		title: "Posizionamento automatico non disponibile"
	});
	setPosizionamento(false);
	setPositionFromAddress();

}		

function trovaFermataDaCallee(func){
	var ferm=null;
	for(var i=0;i<json.fermate.length && ferm==null;i++){
		if(json.fermate[i].callee==func)
			ferm=json.fermate[i];
	}
	return ferm;
}
function closeInfoWindows(){ 
	for(var i=0;i<json.fermate.length;i++) 
		json.fermate[i].closeInfoWindow();
}
			
function resizeMap(){
			$('#map').css("width",$("#map").parent().parent().css("width"));
			$('#map').css("height",$("#appML_content_wrapper").css("height"))

}

function getFermata(key){
	for(var i=0;i<json.fermate.length;i++)
		if(json.fermate[i].key==key)
			return json.fermate[i];
	return null;
}
function getLinea(key){
	for(var i=0;i<json.linee.length;i++)
		if(json.linee[i].key==key)
			return json.linee[i];
	return null;
}
function mostraFermata(val){
	getFermata(val).marker.setMap(mappa);
}
function mostraFermateLinea(val){
	if(val==-1){
		for(i=0;i<json.fermate.length;i++){
			json.fermate[i].marker.setMap(mappa);
		}
	}
	else{
		linea=getLinea(val);
		for(i=0;i<linea.fermate.length;i++){
			(getFermata(linea.fermate[i].key)).marker.setMap(mappa);
		}
	}
}
function mostraPathLinea(val){
	if(val==-1){
		for(i=0;i<json.linee.length;i++){
			json.linee[i].path.setMap(mappa);
		}
	}
	else{
		linea=getLinea(val);
		linea.path.setMap(mappa);
	}
}
function nascondiPathLinea(val){
	if(val==-1){
		for(i=0;i<json.linee.length;i++){
			json.linee[i].path.setMap(null);
		}
	}
	else{
		linea=getLinea(val);
		linea.path.setMap(null);
	}
}
function nascondiFermateLinea(val){
	if(val==-1){
		for(i=0;i<json.fermate.length;i++){
			json.fermate[i].marker.setMap(null);
		}
	}
	else{
		linea=getLinea(val);
		for(i=0;i<linea.fermate.length;i++){
			(getFermata(linea.fermate[i].key)).marker.setMap(null);
		}
	}
}


function showAttesa(linea,fermata,testo){
	$.ajax({
		type: 'post',
		url: attesa_URL+'?linea='+linea+'&fermata='+fermata,
		error: function(XMLHttpRequest, textStatus, errorThrown){
			alert(textStatus + " | " + errorThrown);
		},
		success: function(data){
			appML.appManagerShowDialog({
				message:"<div class='testo_attesa'>"+testo+"<div class='tempo_attesa'>"+data.attesa+"</div> minuti</div>",
				title: "Tempo di attesa"
			});
		},
		dataType: "json"
	});
}
function istanziaEventi(){
	$("img[data-group='linee_mappa']").each(function(){
		$(this).bind("click", function(){
			nascondiFermateLinea(-1);
			nascondiPathLinea(-1);
			mostraFermateLinea($(this).attr('data-id_linea'),true);
			mostraPathLinea($(this).attr('data-id_linea'),true);
			appML.goTo("#map_page");
			mapAutoSet($(this).attr('data-id_linea'),true,"linea")
		});
	});
	$("img[data-group='fermate_mappa']").each(function(){
		$(this).bind("click", function(){
			nascondiFermateLinea(-1);
			nascondiPathLinea(-1);
			mostraFermata($(this).attr('data-id_fermata'),true);
			appML.goTo("#map_page");
			mapAutoSet($(this).attr('data-id_fermata'),true, "fermata")
		});
	});
	$("a[data-group='attesa_linee']").each(function(){
		$(this).bind("click", function(){
			showAttesa($(this).attr('data-id_linea'),$(this).attr('data-id_fermata'),'Il tempo di attesa della linea <b>'+$(this).attr('data-id_linea')+'</b> alla fermata <b>'+$(this).attr('data-id_fermata')+'</b> &egrave; di')
		});
	});
	$('#mappa_auto').bind('click', function(){
		resetMap();
		mapAutoSet(-1,true,"linea");
	});
	$('#indirizzo').bind('blur', function(){
		posiziona(AUTO);
	});
	$('#centra_su_me').bind('click', function(){
		mappa.setCenter(json.posizione.getPosition());
		mappa.setZoom(16);
	});
	$('#check_posizionamento').bind('click', function(){
            posiziona(!$(this).attr("checked"));
	});
}
function resetMap(){
		nascondiFermateLinea(-1);
		nascondiPathLinea(-1);
		mostraFermateLinea(-1);
		mostraPathLinea(-1);

}
